package imagesBuffer;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class BitmapBufferer implements Runnable {
	private String path;
	public Bitmap bitmap;
	public boolean finished;
	
	/**
	 * @param path posizione dell'immagine da caricare
	 */
	public BitmapBufferer(String path) {
		this.path=path;
	}
	
	/**
	 * carica in memoria una versione ridotta dell'immagine
	 */
	@Override
	public void run() {
		finished=false;
	    final BitmapFactory.Options options = new BitmapFactory.Options();
	    options.inJustDecodeBounds = true;
	    BitmapFactory.decodeFile(path, options);

	    options.inSampleSize = calculateInSampleSize(options, 20, 20);

	    options.inJustDecodeBounds = false;
	    bitmap=BitmapFactory.decodeFile(path, options);
	    
		finished=true;
	}
	
	/**
	 * il parametro per ottenere un immagine delle dimensioni richieste
	 * @param options parametri per calcolare il valore in uscite
	 * @param reqWidth larghezza richiesta dell'mmagine
	 * @param reqHeight altezza richiesta per l'immagine
	 * @return il valore da mettere in option.inSampleSize per ottenere le dimensioni richieste
	 */
	public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
	    final int height = options.outHeight;
	    final int width = options.outWidth;
	    int inSampleSize = 1;
	
	    if (height > reqHeight || width > reqWidth) {
	
	        final int halfHeight = height / 2;
	        final int halfWidth = width / 2;
	
	        while ((halfHeight / inSampleSize) > reqHeight
	                && (halfWidth / inSampleSize) > reqWidth) {
	            inSampleSize *= 2;
	        }
	    }
	    return inSampleSize;
	}
}
